from django.shortcuts import render
from django.http import HttpResponse
from django.core.urlresolvers import reverse
# 导入管理员用户包
from django.contrib.auth.models import User,Permission,Group
from django.contrib.auth import authenticate, login,logout
# 添加管理员
def auth_user_add(request):
    # 判断请求方式
    if request.method == 'GET':
        # 获取所有的组
        glist = Group.objects.all()
        # 分配数据
        context = {'glist':glist}
        return render(request,'auth/user/add.html',context)
    elif request.method == 'POST':
        # 执行管理员的添加
        # 判断是否为超级管理员
        try:
            if request.POST['is_superuser'] == '1':

                    # 添加超级管理员
                ob = User.objects.create_superuser(request.POST['username'],request.POST['email'],request.POST['password'])

            else:
                # 添加 普通管理员
                ob = User.objects.create_user(request.POST['username'],request.POST['email'],request.POST['password'])
            ob.save()
            # 判断是否有给用户分配组
            gs = request.POST.getlist('gs',None)
            if gs:
                # 给当前用户分组
                ob.groups.set(gs)
                ob.save()
            return render(request,'info.html',{'msg':'添加成功','url':reverse('auth_user_list')})
        except:
            return render(request, 'info.html', {'msg': '管理员已存在，不能重复添加！', 'url': reverse('auth_user_list')})

# 管理员列表
def auth_user_list(request):
    # 获取所有的管理员
    data = User.objects.all()
    # 分配数据
    context = {'ulist':data}
    return render(request,'auth/user/list.html',context)

# 删除管理员
def auth_user_del(request,uid):
    # 获取用户对象
    ob = User.objects.get(id=uid)
    # 执行删除
    ob.delete()
    return render(request, 'info.html', {'msg': '删除成功', 'url': reverse('auth_user_list')})


# 添加组
def auth_group_add(request):
    # 判断提交方式
    if request.method == 'GET':
        # 读取全部权限信息
        # Permission.objects.all()
        # 筛选出自定义的权限信息  排除以 'Can'开头的权限信息
        perms = Permission.objects.exclude(name__istartswith ='Can')
        # perms = Permission.objects.exclude(name__istartswith='Can')
        # 分配数据
        context = {'perms':perms}
        return render(request,'auth/group/add.html',context)
    elif request.method == 'POST':
        try:
            # 创建组
            g = Group(name=request.POST['name'])
            g.save()
            # 获取所有选择的权限
            prms = request.POST.getlist('prms',None)
            # 判断是否给组添加了权限
            if prms:
                # 给组分配权限
                g.permissions.set(prms)
                g.save()
            return render(request,'info.html',{'msg':'添加成功','url':reverse('auth_group_list')})
        except:
            return render(request, 'info.html', {'msg': '当前组已存在！不能重复添加', 'url': reverse('auth_group_list')})
# 组列表
def auth_group_list(request):
    # 获取所有的组
    data = Group.objects.all()
    # 分配数据
    context = {'glist':data}
    return render(request,'auth/group/list.html',context)

# 组编辑
def groupedit(request,gid):
    # 获取当前组的信息
    ginfo = Group.objects.get(id=gid)
    # 判断当前请求状态
    if request.method == 'GET':
        # 获取所有的权限信息  并排除已有的权限信息(group=ginfo:已选中的权限)
        perms = Permission.objects.exclude(group=ginfo).exclude(name__istartswith='Can')
        # 分配数据
        context = {'ginfo':ginfo,'perms':perms}
        # 返回模板
        return render(request,'auth/group/edit.html',context)
    elif request.method == 'POST':
        # 修改组名
        ginfo.name = request.POST['name']
        # 判断是否有权限提交
            #获取所有权限
        prms = request.POST.getlist('prms',None)
            # 将之前的权限清空 clear
        ginfo.permissions.clear()
            # 如果有选择权限
        if prms:
            # 添加权限
            ginfo.permissions.set(prms)
        ginfo.save()
        return render(request,'info.html',{'msg':'修改成功','url':reverse('auth_group_list')})

    # 登录
def my_login(request):
        if request.method == 'GET':
            # 返回一个登录页面
            return render(request, 'admin/login.html')
        elif request.method == 'POST':
            # 获取用户
            username = request.POST['username']
            # 获取用户密码
            password = request.POST['password']
            # 进行验证  框架自带 正确返回用户对象  错误返回None
            user = authenticate(request,username=username,password=password)
            if user:
                # 进行登录
                login(request,user)
                # 进行跳转
                return render(request, 'info.html', {'msg': '登录成功', 'url': reverse('admin_index')})

            return render(request, 'info.html', {'msg': '用户名或密码错误', 'url': reverse('admin_login')})

    # 退出登录
def my_logout(request):
        # 退出登录
        logout(request)
        return render(request, 'info.html', {'msg': '正在退出', 'url': reverse('admin_login')})


